require "controller/poller_exception"
require "model/connection"
require "singleton"
require "model/eleicao_dao"
require "view/eleicao_view"

class RelatorioDao

  include Singleton

  def initialize
    self
  end
  
  def resultado
    begin
      sql = "SELECT c.nome, COUNT(v.id_candidato) FROM voto v, candidato c WHERE v.id_candidato = c.id AND v.id_eleicao = ? GROUP BY v.id_candidato"
      conn = Connection.instance.get_conn
      rst = conn.query(sql, EleicaoView.instance.get_eleicao)
      v_votos = Array.new
      i=0
      rst.each do |row|
        v_votos[i] = Array.new
        v_votos[i].push row[0].to_s
        v_votos[i].push row[1].to_i
        i = i + 1
      end
      rst.close
      v_votos
    rescue Exception
      return PollerException.instance.throw(conn.errmsg, "[dao] Erro ao gerar resultados para Relatório.")
    end

  end

  def cont_votos
    sql = "SELECT COUNT(titulo) FROM voto WHERE id_eleicao = ?"
    conn = Connection.instance.get_conn
    num = conn.get_first_value(sql, EleicaoView.instance.get_eleicao)
    return num.to_i
  end

  def cont_brancos
    sql = "SELECT COUNT(id) FROM voto WHERE id_candidato = 0 AND id_eleicao = ?"
    conn = Connection.instance.get_conn
    num = conn.get_first_value(sql, EleicaoView.instance.get_eleicao)
    return num.to_i
  end

  def cont_nulos
    sql = "SELECT  COUNT(id) FROM voto WHERE id_candidato IS NULL AND id_eleicao = ?"
    conn = Connection.instance.get_conn
    num = conn.get_first_value(sql, EleicaoView.instance.get_eleicao)
    return num.to_i
  end

  def cont_abstencao
    sql = "SELECT COUNT(titulo) FROM eleitor WHERE votou = 'FALSE'"
    conn = Connection.instance.get_conn
    num = conn.get_first_value(sql)
    return num.to_i
  end

end
